<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
      <title>Class TransformationGeom | HiAPI-C# 2025 </title>
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <meta name="title" content="Class TransformationGeom | HiAPI-C# 2025 ">
      
      <meta name="description" content="Represents a geometric transformation that can be applied to a geometry object. This class combines a transformer with a target geometry to produce transformed geometric results.">
      <link rel="icon" href="../img/HiAPI.favicon.ico">
      <link rel="stylesheet" href="../public/docfx.min.css">
      <link rel="stylesheet" href="../public/main.css">
      <meta name="docfx:navrel" content="../toc.html">
      <meta name="docfx:tocrel" content="toc.html">
      
      <meta name="docfx:rel" content="../">
      
      
      
      <meta name="loc:inThisArticle" content="In this article">
      <meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
      <meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
      <meta name="loc:tocFilter" content="Filter by title">
      <meta name="loc:nextArticle" content="Next">
      <meta name="loc:prevArticle" content="Previous">
      <meta name="loc:themeLight" content="Light">
      <meta name="loc:themeDark" content="Dark">
      <meta name="loc:themeAuto" content="Auto">
      <meta name="loc:changeTheme" content="Change theme">
      <meta name="loc:copy" content="Copy">
      <meta name="loc:downloadPdf" content="Download PDF">

      <script type="module" src="./../public/docfx.min.js"></script>

      <script>
        const theme = localStorage.getItem('theme') || 'auto'
        document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
      </script>

  </head>

  <body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
    <header class="bg-body border-bottom">
      <nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
        <div class="container-xxl flex-nowrap">
          <a class="navbar-brand" href="../index.html">
            <img id="logo" class="svg" src="../img/HiAPI.logo.png" alt="">
            
          </a>
          <button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
            <i class="bi bi-three-dots"></i>
          </button>
          <div class="collapse navbar-collapse" id="navpanel">
            <div id="navbar">
              <form class="search" role="search" id="search">
                <i class="bi bi-search"></i>
                <input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
              </form>
            </div>
          </div>
        </div>
      </nav>
    </header>

    <main class="container-xxl">
      <div class="toc-offcanvas">
        <div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
          <div class="offcanvas-header">
            <h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
            <button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
          </div>
          <div class="offcanvas-body">
            <nav class="toc" id="toc"></nav>
          </div>
        </div>
      </div>

      <div class="content">
        <div class="actionbar">
          <button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
            <i class="bi bi-list"></i>
          </button>

          <nav id="breadcrumb"></nav>
        </div>

        <article data-uid="Hi.Geom.TransformationGeom">



  <h1 id="Hi_Geom_TransformationGeom" data-uid="Hi.Geom.TransformationGeom" class="text-break">
Class TransformationGeom  
  </h1>

  <div class="facts text-secondary">
    <dl><dt>Namespace</dt><dd><a class="xref" href="Hi.html">Hi</a>.<a class="xref" href="Hi.Geom.html">Geom</a></dd></dl>
  <dl><dt>Assembly</dt><dd>HiMech.dll</dd></dl>
  </div>

  <div class="markdown summary"><p>Represents a geometric transformation that can be applied to a geometry object.
This class combines a transformer with a target geometry to produce transformed geometric results.</p>
</div>
  <div class="markdown conceptual"></div>

  <div class="codewrapper">
    <pre><code class="lang-csharp hljs">public class TransformationGeom : IStlSource, IGetStl, IMakeXmlSource, IGeomProperty, IGenStl, IExpandToBox3d, IDuplicate</code></pre>
  </div>




  <dl class="typelist inheritance">
    <dt>Inheritance</dt>
    <dd>
      <div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
      <div><span class="xref">TransformationGeom</span></div>
    </dd>
  </dl>

  <dl class="typelist implements">
    <dt>Implements</dt>
    <dd>
      <div><a class="xref" href="Hi.Geom.IStlSource.html">IStlSource</a></div>
      <div><a class="xref" href="Hi.Geom.IGetStl.html">IGetStl</a></div>
      <div><a class="xref" href="Hi.Common.XmlUtils.IMakeXmlSource.html">IMakeXmlSource</a></div>
      <div><a class="xref" href="Hi.Geom.IGeomProperty.html">IGeomProperty</a></div>
      <div><a class="xref" href="Hi.Geom.IGenStl.html">IGenStl</a></div>
      <div><a class="xref" href="Hi.Geom.IExpandToBox3d.html">IExpandToBox3d</a></div>
      <div><a class="xref" href="Hi.Common.IDuplicate.html">IDuplicate</a></div>
    </dd>
  </dl>


  <dl class="typelist inheritedMembers">
    <dt>Inherited Members</dt>
    <dd>
    <div>
      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
    </div>
    <div>
      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
    </div>
    <div>
      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
    </div>
    <div>
      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
    </div>
    <div>
      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone">object.MemberwiseClone()</a>
    </div>
    <div>
      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
    </div>
  </dd></dl>

  <dl class="typelist extensionMethods">
    <dt>Extension Methods</dt>
    <dd>
  <div>
      <a class="xref" href="Hi.Geom.StlUtil.html#Hi_Geom_StlUtil_ToFaceDrawing_Hi_Geom_IGetStl_">StlUtil.ToFaceDrawing(IGetStl)</a>
  </div>
  <div>
      <a class="xref" href="Hi.Geom.StlUtil.html#Hi_Geom_StlUtil_ToLineDrawing_Hi_Geom_IGetStl_">StlUtil.ToLineDrawing(IGetStl)</a>
  </div>
  <div>
      <a class="xref" href="Hi.Common.DuplicateUtil.html#Hi_Common_DuplicateUtil_TryDuplicate__1___0_System_Object___">DuplicateUtil.TryDuplicate&lt;TSelf&gt;(TSelf, params object[])</a>
  </div>
  <div>
      <a class="xref" href="Hi.Common.InvokeUtil.html#Hi_Common_InvokeUtil_SelfInvoke__1___0_System_Action___0__">InvokeUtil.SelfInvoke&lt;TSrc&gt;(TSrc, Action&lt;TSrc&gt;)</a>
  </div>
  <div>
      <a class="xref" href="Hi.Common.InvokeUtil.html#Hi_Common_InvokeUtil_SelfInvoke__2___0_System_Func___0___1__">InvokeUtil.SelfInvoke&lt;TSrc, TDst&gt;(TSrc, Func&lt;TSrc, TDst&gt;)</a>
  </div>
  <div>
      <a class="xref" href="Hi.Coloring.ColorUtil.html#Hi_Coloring_ColorUtil_GetGloomyColor_System_Object_System_Double_System_Double_">ColorUtil.GetGloomyColor(object, double, double)</a>
  </div>
  <div>
      <a class="xref" href="Hi.Common.NameUtil.html#Hi_Common_NameUtil_GetSelectionName_System_Object_">NameUtil.GetSelectionName(object)</a>
  </div>
  <div>
      <a class="xref" href="Hi.Common.StringUtil.html#Hi_Common_StringUtil_GetPropertyStringIfToStringNotOverloaded_System_Object_System_Boolean_System_Boolean_">StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool)</a>
  </div>
  <div>
      <a class="xref" href="Hi.Parallels.LockUtil.html#Hi_Parallels_LockUtil_Lock_System_Object_">LockUtil.Lock(object)</a>
  </div>
  </dd></dl>



  <h2 id="Hi_Geom_TransformationGeom_remarks">Remarks</h2>
  <div class="markdown level0 remarks"><p>The TransformationGeom class provides functionality to:</p>
<ul>
<li>Apply geometric transformations to STL geometry</li>
<li>Support XML serialization and deserialization</li>
<li>Handle duplication of transformation configurations</li>
<li>Manage transformation matrices and their application to geometry</li>
</ul>
</div>


  <h2 class="section" id="constructors">Constructors
</h2>


  <a id="Hi_Geom_TransformationGeom__ctor_" data-uid="Hi.Geom.TransformationGeom.#ctor*"></a>

  <h3 id="Hi_Geom_TransformationGeom__ctor" data-uid="Hi.Geom.TransformationGeom.#ctor">
  TransformationGeom()
  
  </h3>

  <div class="markdown level1 summary"><p>Initializes a new instance of the TransformationGeom class with default values.</p>
</div>
  <div class="markdown level1 conceptual"></div>

  <div class="codewrapper">
    <pre><code class="lang-csharp hljs">public TransformationGeom()</code></pre>
  </div>













  <a id="Hi_Geom_TransformationGeom__ctor_" data-uid="Hi.Geom.TransformationGeom.#ctor*"></a>

  <h3 id="Hi_Geom_TransformationGeom__ctor_Hi_Geom_IGetStl_" data-uid="Hi.Geom.TransformationGeom.#ctor(Hi.Geom.IGetStl)">
  TransformationGeom(IGetStl)
  
  </h3>

  <div class="markdown level1 summary"><p>Initializes a new instance of the TransformationGeom class with a specified geometry.</p>
</div>
  <div class="markdown level1 conceptual"></div>

  <div class="codewrapper">
    <pre><code class="lang-csharp hljs">public TransformationGeom(IGetStl geom)</code></pre>
  </div>

  <h4 class="section">Parameters</h4>
  <dl class="parameters">
    <dt><code>geom</code> <a class="xref" href="Hi.Geom.IGetStl.html">IGetStl</a></dt>
    <dd><p>The geometry object to be transformed.</p>
</dd>
  </dl>












  <a id="Hi_Geom_TransformationGeom__ctor_" data-uid="Hi.Geom.TransformationGeom.#ctor*"></a>

  <h3 id="Hi_Geom_TransformationGeom__ctor_System_Xml_Linq_XElement_System_String_" data-uid="Hi.Geom.TransformationGeom.#ctor(System.Xml.Linq.XElement,System.String)">
  TransformationGeom(XElement, string)
  
  </h3>

  <div class="markdown level1 summary"><p>Initializes a new instance of the TransformationGeom class from XML data.</p>
</div>
  <div class="markdown level1 conceptual"></div>

  <div class="codewrapper">
    <pre><code class="lang-csharp hljs">public TransformationGeom(XElement src, string baseDirectory)</code></pre>
  </div>

  <h4 class="section">Parameters</h4>
  <dl class="parameters">
    <dt><code>src</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.xml.linq.xelement">XElement</a></dt>
    <dd><p>The XML element containing the transformation data.</p>
</dd>
    <dt><code>baseDirectory</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
    <dd><p>The base directory for resolving relative paths.</p>
</dd>
  </dl>








  <h4 class="section" id="Hi_Geom_TransformationGeom__ctor_System_Xml_Linq_XElement_System_String__remarks">Remarks</h4>
  <div class="markdown level1 remarks"><p>This constructor deserializes both the transformer and geometry data from the provided XML.
If either element is missing or invalid, the corresponding property will be null.</p>
</div>




  <h2 class="section" id="properties">Properties
</h2>


  <a id="Hi_Geom_TransformationGeom_Geom_" data-uid="Hi.Geom.TransformationGeom.Geom*"></a>

  <h3 id="Hi_Geom_TransformationGeom_Geom" data-uid="Hi.Geom.TransformationGeom.Geom">
  Geom
  
  </h3>

  <div class="markdown level1 summary"><p>Gets or sets the target geometry that will be transformed.</p>
</div>
  <div class="markdown level1 conceptual"></div>

  <div class="codewrapper">
    <pre><code class="lang-csharp hljs">public IGetStl Geom { get; set; }</code></pre>
  </div>





  <h4 class="section">Property Value</h4>
  <dl class="parameters">
    <dt><a class="xref" href="Hi.Geom.IGetStl.html">IGetStl</a></dt>
    <dd></dd>
  </dl>




  <h4 class="section" id="Hi_Geom_TransformationGeom_Geom_remarks">Remarks</h4>
  <div class="markdown level1 remarks"><p>This property represents the base geometry object that will have the transformation applied to it.
If null, operations involving this geometry will return null results.</p>
</div>




  <a id="Hi_Geom_TransformationGeom_Transformer_" data-uid="Hi.Geom.TransformationGeom.Transformer*"></a>

  <h3 id="Hi_Geom_TransformationGeom_Transformer" data-uid="Hi.Geom.TransformationGeom.Transformer">
  Transformer
  
  </h3>

  <div class="markdown level1 summary"><p>Gets or sets the transformer that defines the geometric transformation.
The transformation is applied from left (first element) to right (last element),
with the target geometry being on the left side.</p>
</div>
  <div class="markdown level1 conceptual"></div>

  <div class="codewrapper">
    <pre><code class="lang-csharp hljs">public ITransformer Transformer { get; set; }</code></pre>
  </div>





  <h4 class="section">Property Value</h4>
  <dl class="parameters">
    <dt><a class="xref" href="Hi.Mech.Topo.ITransformer.html">ITransformer</a></dt>
    <dd></dd>
  </dl>




  <h4 class="section" id="Hi_Geom_TransformationGeom_Transformer_remarks">Remarks</h4>
  <div class="markdown level1 remarks"><p>The transformer can be null, in which case no transformation is applied to the geometry.</p>
</div>




  <a id="Hi_Geom_TransformationGeom_XName_" data-uid="Hi.Geom.TransformationGeom.XName*"></a>

  <h3 id="Hi_Geom_TransformationGeom_XName" data-uid="Hi.Geom.TransformationGeom.XName">
  XName
  
  </h3>

  <div class="markdown level1 summary"><p>Gets the XML element name used for serialization.</p>
</div>
  <div class="markdown level1 conceptual"></div>

  <div class="codewrapper">
    <pre><code class="lang-csharp hljs">public static string XName { get; }</code></pre>
  </div>





  <h4 class="section">Property Value</h4>
  <dl class="parameters">
    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
    <dd><p>The string &ldquo;TransformationGeom&rdquo;.</p>
</dd>
  </dl>








  <h2 class="section" id="methods">Methods
</h2>


  <a id="Hi_Geom_TransformationGeom_Duplicate_" data-uid="Hi.Geom.TransformationGeom.Duplicate*"></a>

  <h3 id="Hi_Geom_TransformationGeom_Duplicate_System_Object___" data-uid="Hi.Geom.TransformationGeom.Duplicate(System.Object[])">
  Duplicate(params object[])
  
  </h3>

  <div class="markdown level1 summary"><p>Creates a deep copy of the object, excluding any source file references.</p>
</div>
  <div class="markdown level1 conceptual"></div>

  <div class="codewrapper">
    <pre><code class="lang-csharp hljs">public object Duplicate(params object[] res)</code></pre>
  </div>

  <h4 class="section">Parameters</h4>
  <dl class="parameters">
    <dt><code>res</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a>[]</dt>
    <dd><p>Optional parameters that may be needed during the duplication process</p>
</dd>
  </dl>

  <h4 class="section">Returns</h4>
  <dl class="parameters">
    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></dt>
    <dd><p>A new instance that is a deep copy of the original object</p>
</dd>
  </dl>







  <h4 class="section" id="Hi_Geom_TransformationGeom_Duplicate_System_Object____remarks">Remarks</h4>
  <div class="markdown level1 remarks"><p>The duplication process creates new instances of both the transformer and geometry objects
if they implement the appropriate cloning interfaces.</p>
</div>




  <a id="Hi_Geom_TransformationGeom_ExpandToBox3d_" data-uid="Hi.Geom.TransformationGeom.ExpandToBox3d*"></a>

  <h3 id="Hi_Geom_TransformationGeom_ExpandToBox3d_Hi_Geom_Box3d_" data-uid="Hi.Geom.TransformationGeom.ExpandToBox3d(Hi.Geom.Box3d)">
  ExpandToBox3d(Box3d)
  
  </h3>

  <div class="markdown level1 summary"><p>Expands the given box to include the bounds of the transformed geometry.</p>
</div>
  <div class="markdown level1 conceptual"></div>

  <div class="codewrapper">
    <pre><code class="lang-csharp hljs">public void ExpandToBox3d(Box3d dst)</code></pre>
  </div>

  <h4 class="section">Parameters</h4>
  <dl class="parameters">
    <dt><code>dst</code> <a class="xref" href="Hi.Geom.Box3d.html">Box3d</a></dt>
    <dd><p>The box to expand.</p>
</dd>
  </dl>








  <h4 class="section" id="Hi_Geom_TransformationGeom_ExpandToBox3d_Hi_Geom_Box3d__remarks">Remarks</h4>
  <div class="markdown level1 remarks"><p>This method updates the provided box to encompass the transformed geometry.
If the geometry or its STL representation is null, no expansion occurs.</p>
</div>




  <a id="Hi_Geom_TransformationGeom_GenStl_" data-uid="Hi.Geom.TransformationGeom.GenStl*"></a>

  <h3 id="Hi_Geom_TransformationGeom_GenStl_Hi_Geom_Resolution_IPolarResolution2d_" data-uid="Hi.Geom.TransformationGeom.GenStl(Hi.Geom.Resolution.IPolarResolution2d)">
  GenStl(IPolarResolution2d)
  
  </h3>

  <div class="markdown level1 summary"><p>Generates a new STL.</p>
</div>
  <div class="markdown level1 conceptual"></div>

  <div class="codewrapper">
    <pre><code class="lang-csharp hljs">public Stl GenStl(IPolarResolution2d resolution)</code></pre>
  </div>

  <h4 class="section">Parameters</h4>
  <dl class="parameters">
    <dt><code>resolution</code> <a class="xref" href="Hi.Geom.Resolution.IPolarResolution2d.html">IPolarResolution2d</a></dt>
    <dd><p>Polar resolution</p>
</dd>
  </dl>

  <h4 class="section">Returns</h4>
  <dl class="parameters">
    <dt><a class="xref" href="Hi.Geom.Stl.html">Stl</a></dt>
    <dd><p>A newly created STL.</p>
</dd>
  </dl>











  <a id="Hi_Geom_TransformationGeom_GetStl_" data-uid="Hi.Geom.TransformationGeom.GetStl*"></a>

  <h3 id="Hi_Geom_TransformationGeom_GetStl" data-uid="Hi.Geom.TransformationGeom.GetStl">
  GetStl()
  
  </h3>

  <div class="markdown level1 summary"><p>Gets the transformed STL representation of the geometry.</p>
</div>
  <div class="markdown level1 conceptual"></div>

  <div class="codewrapper">
    <pre><code class="lang-csharp hljs">public Stl GetStl()</code></pre>
  </div>


  <h4 class="section">Returns</h4>
  <dl class="parameters">
    <dt><a class="xref" href="Hi.Geom.Stl.html">Stl</a></dt>
    <dd><p>The transformed STL if both geometry and transformer are valid;
the original STL if transformer is null;
null if geometry is null or produces null STL.</p>
</dd>
  </dl>







  <h4 class="section" id="Hi_Geom_TransformationGeom_GetStl_remarks">Remarks</h4>
  <div class="markdown level1 remarks"><p>If the transformer is null, the method returns the untransformed geometry.
If the geometry is null or produces a null STL, the method returns null.</p>
</div>




  <a id="Hi_Geom_TransformationGeom_MakeXmlSource_" data-uid="Hi.Geom.TransformationGeom.MakeXmlSource*"></a>

  <h3 id="Hi_Geom_TransformationGeom_MakeXmlSource_System_String_System_String_System_Boolean_" data-uid="Hi.Geom.TransformationGeom.MakeXmlSource(System.String,System.String,System.Boolean)">
  MakeXmlSource(string, string, bool)
  
  </h3>

  <div class="markdown level1 summary"><p>Creates an XML representation of the object.
This method may also generate additional resources such as related files.</p>
</div>
  <div class="markdown level1 conceptual"></div>

  <div class="codewrapper">
    <pre><code class="lang-csharp hljs">public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly)</code></pre>
  </div>

  <h4 class="section">Parameters</h4>
  <dl class="parameters">
    <dt><code>baseDirectory</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
    <dd><p>The base directory for resolving relative paths</p>
</dd>
    <dt><code>relFile</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
    <dd><p>The relative file path for the XML source</p>
</dd>
    <dt><code>exhibitionOnly</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
    <dd><p>if true, the extended file creation is suppressed.</p>
</dd>
  </dl>

  <h4 class="section">Returns</h4>
  <dl class="parameters">
    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.xml.linq.xelement">XElement</a></dt>
    <dd><p>An XML element representing the object's state</p>
</dd>
  </dl>







  <h4 class="section" id="Hi_Geom_TransformationGeom_MakeXmlSource_System_String_System_String_System_Boolean__remarks">Remarks</h4>
  <div class="markdown level1 remarks"><p>For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied.
The <code class="paramref">baseDirectory</code> is typically the folder at the nearest configuration file folder.
Since the folder can be moving with the configuration file.</p>
</div>




  <a id="Hi_Geom_TransformationGeom_ToString_" data-uid="Hi.Geom.TransformationGeom.ToString*"></a>

  <h3 id="Hi_Geom_TransformationGeom_ToString" data-uid="Hi.Geom.TransformationGeom.ToString">
  ToString()
  
  </h3>

  <div class="markdown level1 summary"><p>Returns a string that represents the current object.</p>
</div>
  <div class="markdown level1 conceptual"></div>

  <div class="codewrapper">
    <pre><code class="lang-csharp hljs">public override string ToString()</code></pre>
  </div>


  <h4 class="section">Returns</h4>
  <dl class="parameters">
    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
    <dd><p>A string that represents the current object.</p>
</dd>
  </dl>












</article>

        <div class="contribution d-print-none">
        </div>


      </div>

      <div class="affix">
        <nav id="affix"></nav>
      </div>
    </main>

    <div class="container-xxl search-results" id="search-results"></div>

    <footer class="border-top text-secondary">
      <div class="container-xxl">
        <div class="flex-fill">
          <span> Copyright © 2025 <a href='https://superhightech.com.tw'>Tech Coordinate</a>. All rights reserved. <a href='https://superhightech.com.tw'>超級高科技股份有限公司</a> © 2025 版權所有 </span>
        </div>
      </div>
    </footer>
  </body>
</html>
